import {
    @ButtonProperty,
    @CheckboxProperty,
    Color,
    @ColorProperty,
    @PercentSliderProperty,
    @SelectorProperty,
    @SwitchProperty,
	@SliderProperty,
    @TextProperty,
    @Vigilant,
    @NumberProperty,
} from './vigilance';


@Vigilant('eventConfig', '§6事件功能设置')
class Settings {
    constructor() {
        this.initialize(this);
        this.setCategoryDescription("Party", "");
        this.setSubcategoryDescription('Party', 'Party Command', '&r队伍指令 , 在自己是队长时小队内有&6其他人&r发送对应消息时自动执行指令');
        this.setSubcategoryDescription('Party', 'Direct Message Command', '&r私聊指令 , 有人私聊给你发送对应消息时自动执行指令');

        this.setCategoryDescription("Popup Events", "&6事件弹窗提示\n相关按键在游戏按钮设置中修改\n触发对应事件时会在屏幕上弹出提示并可以按按键快速接受");

        this.setCategoryDescription("Skyblock Spook", "&5万圣节小活动相关功能\n活动应该只会在十月份开启,其他时候这些功能没有用");

        this.setCategoryDescription("不一定能用的功能", "这些功能可能需要一些前置才能生效\n大多都是skyblock的,但是主菜单写不下了");
    }


    @SwitchProperty({
        name: 'Auto Accept Reparty',
        description: '自动接受reparty时的组队邀请(支持中文和英文)',
        category: 'Party',
    })
    AutoAcceptReparty = false;

    @SwitchProperty({
        name: '自动跳过p warp二次确认',
        description: '在弹出这条 ↓ 消息后半秒再/p warp一次\nSome players are still in-game, run the command again to confirm warp!',
        category: 'Party',
    })
    DoubleWarp = false;

    @SwitchProperty({
        name: '/pt 指令',
        description: '开启后可以直接使用 /pt <player> 来转让队长\n输入玩家名的时候可以尝试使用Tab键补全\n其他mod也有/pt指令时会注册不上(抢不过)',
        category: 'Party',
    })
    PTCMD = false;

    //队伍聊天指令
    @SwitchProperty({
        name: 'Party Transfer',
        description: '小队内有其他人发送 "!ptme" 时将队长转让给Ta\n内容检测用的正则表达式: /^[!！][ ]?pt[ ]?(me)?$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartyTransfer = false;

    @SwitchProperty({
        name: 'Party Settings Allinvite',
        description: '小队内有人发送 "!allinv" 时 开/关 全体邀请\n内容检测用的正则表达式: /^[!！][ ]?all(inv)?(ite)?$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartyAllinvite = false;

    @SwitchProperty({
        name: 'Party invite',
        description: '小队内有人发送 "!p (玩家名)" 时邀请该玩家\n内容检测用的正则表达式: /^[!！][ ]?p ([a-zA-Z0-9_-]+)$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartyInvite = false;

    @SwitchProperty({
        name: 'Party warp',
        description: '小队内有人发送 "!warp" 时开始准备 p warp\n内容检测用的正则表达式: /^[!！][ ]?warp?$/i\n取消命令: "!c",对应正则: /^[!！][ ]?(warp)?[ ]?c(ancel)?$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartyWarp = false;

    @SliderProperty({
        name: 'Party warp 延迟',
        description: '队内有人发送 "!warp" 到执行p warp 指令之间的时间间隔(秒)\n间隔时可用"!c"取消',
        min: 0,
        max: 10,
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartyWarpDelay = 5;

    @TextProperty({
        name: "Party warp 提示消息",
        description: "进入 party warp 等待倒数时在队伍聊天发送的消息",
        category: 'Party',
        subcategory: 'Party Command',
        placeholder: '不填那就是什么都不发喽'
    })
    PartyWarpMessage = `Party warp in %delay%s, if you don't want to warp, please type "!c" in party chat`;

    @TextProperty({
        name: "Party warp 取消消息",
        description: "party warp 被取消时在队伍聊天发送的消息",
        category: 'Party',
        subcategory: 'Party Command',
        placeholder: '不填那就是什么都不发喽'
    })
    PartyWarpCancelMessage = "Canceled warp.";

    @SwitchProperty({
        name: 'Skyblock Join',
        description: '小队内有人发送 "!join (fe/m2/f3)" 且在Skyblock内时加入对应的地牢/Kuudra\n内容检测用的正则表达式: /^[!！][ ]?(join)?[ ]?([fmt])([e0-7])$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartySkyblockJoin = false;

    @SwitchProperty({
        name: 'skyblock send coords',
        description: '小队内有人在队伍里发送 "!sc" 且你们在同一个Skyblock房间时在队伍聊天发送自己当前坐标\n内容检测用的正则表达式: /^[!！][ ]?(s)?(end)?[ ]?c(oord|oords)?$/i',
        category: 'Party',
        subcategory: 'Party Command'
    })
    PartySkyblockSendCoords = false;

    @SwitchProperty({
        name: '邀请进入组队',
        description: '有人给你私聊发 "!p" 时邀请他进入组队\n内容检测用的正则表达式: /^From (.+): [!！][ ]?p(arty)?(.*)?$/i',
        category: 'Party',
        subcategory: 'Direct Message Command'
    })
    DMpartyme = false;


    //popup Events
    @SwitchProperty({
        name: '组队邀请提醒',
        description: '有人邀请你加入组队时弹窗提醒',
        category: 'Popup Events',
    })
    popupPartyInvite = false;

    @SwitchProperty({
        name: '公会组队邀请提醒',
        description: '有人邀请公会里所有人加入组队时弹窗提醒',
        category: 'Popup Events',
    })
    popupGuildPartyInvite = false;

    @SwitchProperty({
        name: '好友申请提醒',
        description: '有人加你好友时弹窗提醒',
        category: 'Popup Events',
    })
    popupFriendRequest = false;

    @SwitchProperty({
        name: '决斗邀请提醒',
        description: '有人邀请您加入决斗时弹窗提醒',
        category: 'Popup Events',
    })
    popupDuelsRequest = false;

    @SwitchProperty({
        name: 'Skyblock 交易提醒',
        description: '有人像你发起交易申请时弹窗提醒',
        category: 'Popup Events',
    })
    popupSkyblockTrade = false;

    @SwitchProperty({
        name: '地牢 / Kuudra 重开',
        description: '小队里有人发 rs 时询问是否重开',
        category: 'Popup Events',
    })
    popupDungeonRestart = false;


    //Skyblock Spook
    @SwitchProperty({
        name: '自动做万圣节怪的数学题和点击消息',
        description: '消息几乎秒发,那点网络延迟就当随机延迟了',
        category: 'Skyblock Spook',
    })
    SkyblockGreatSpook = false;

    @SwitchProperty({
        name: '或者你可以打开这个,额外加个半秒到一秒延迟',
        description: '嗯,大概就是这样. 然后就别说 "mod做的还没我自己做的快"',
        category: 'Skyblock Spook',
    })
    SkyblockGreatSpookDelay = false;

    @TextProperty({
        name: '[FEAR] Public Speaking Demon: Say something interesting ' + Player.getName() + '!',
        description: '上面那个打开以后出现 ↑ 后在公屏自动发的话 , 填空则发送NPC的原话',
        category: 'Skyblock Spook',
        placeholder: '[FEAR] Public Speaking Demon: Say something interesting ' + Player.getName() + '!',
    })
    PublicSpeakingDemon = "something interesting";


    //不一定能用的功能
    @SwitchProperty({
        name: 'bits价格计算',
        description: '在bits商店显示bits/coin\n依赖于neu的物品价格查询',
        category: '不一定能用的功能',
    })
    BitsShopPrice = false;
}

export default new Settings();
